/**
 * 循环队列
 * 使用tag表示空还是满，从而使所有位置都能用上
 * 
 * 最开始的时候tag为0表示队列为空
 * 当一直插入到rear=head的时候，设置tag=1表示队列满了
 * 当一直删除到read=head的时候，设置tag=0表示队列空了
 */

#include"queueSeq.h"
#include<stdbool.h>

int tag=0;//这个变量应该设置在queue内部

bool pushWithTag(Queue* q,int x){
    if(q->head==q->rear&&tag==1){
        printf("queue full\n");
        return 0;
    }
    //不满的时候入队
    q->data[q->rear]=x;
    q->rear=(q->rear+1)%MAX_SIZE_QUEUE;
    tag=1;//这里每次都赋值，也是可以的，不丢失一般性
    return 1;
    

}

bool popWithTag(Queue* q,int *x){
    if(q->head==q->rear&&tag==0){//tag=0是空，则不能出队列
        printf("queue empty\n");
        return 0;
    }
    //队列不空的时候
    (*x)=q->data[q->head];
    q->head=(q->head+1)%MAX_SIZE_QUEUE;
    tag=0;
    return 0;

}